--Remap space as leader key
vim.g.mapleader = " "
vim.g.maplocalleader = " "

-- Modes
-- normal_mode = "n",
-- insert_mode = "i",
-- visual_mode = "v",
-- visual_block_mode = "x",
-- term_mode = "t",
-- command_mode = "c",

-- Change working directory
vim.keymap.set("n", "<leader>,", ":cd %:p:h<CR>")

-- Close and Quit form nvim
vim.keymap.set("n", "<leader>q", ":q<CR>")
vim.keymap.set("n", "<leader>c", ":bd<CR>")
vim.keymap.set("n", "<leader>w", ":w<CR>")

-- Normal --
-- Don't use arrow keys in normal mode!
vim.keymap.set("n", "<Left>", ":echoe 'Use h/j/k/l for navigate'<CR>")
vim.keymap.set("n", "<Right>", ":echoe 'Use h/j/k/l for navigate'<CR>")
vim.keymap.set("n", "<Up>", ":echoe 'Use h/j/k/l for navigate'<CR>")
vim.keymap.set("n", "<Down>", ":echoe 'Use h/j/k/l for navigate'<CR>")

-- Oil toggle
-- vim.keymap.set("n", "<leader>e", ":Explore<CR>")
vim.keymap.set("n", "-", "<CMD>Oil<CR>", { desc = "Open parent directory" })

-- Hightlight off
vim.keymap.set("n", "<leader>h", ":nohls<CR>")

-- Search/Replace text
vim.keymap.set("n", "<leader>s", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]])

-- Better window navigation
-- vim.keymap.set("n", "<C-h>", "<C-w>h")
-- vim.keymap.set("n", "<C-j>", "<C-w>j")
-- vim.keymap.set("n", "<C-k>", "<C-w>k")
-- vim.keymap.set("n", "<C-l>", "<C-w>l")

-- Resize with arrows
vim.keymap.set("n", "<C-Up>", ":resize -2<CR>")
vim.keymap.set("n", "<C-Down>", ":resize +2<CR>")
vim.keymap.set("n", "<C-Left>", ":vertical resize -2<CR>")
vim.keymap.set("n", "<C-Right>", ":vertical resize +2<CR>")

-- Navigate buffers
vim.keymap.set("n", "<S-l>", ":bnext<CR>")
vim.keymap.set("n", "<S-h>", ":bprevious<CR>")

-- Move text up and down
-- vim.keymap.set("n", "<C-j>", "<Esc>:m .+1<CR>")
-- vim.keymap.set("n", "<C-k>", "<Esc>:m .-2<CR>")

vim.keymap.set("n", "J", "mzJ`z")
vim.keymap.set("n", "<C-d>", "<C-d>zz")
vim.keymap.set("n", "<C-u>", "<C-u>zz")
vim.keymap.set("n", "n", "nzzzv")
vim.keymap.set("n", "N", "Nzzzv")

-- Insert --
-- This is going to get me cancelled
vim.keymap.set("i", "<C-c>", "<Esc>")

-- Press jj fast to enter
vim.keymap.set("i", "оо", "<ESC>")
vim.keymap.set("i", "jj", "<ESC>")

-- Visual --
-- Stay in indent mode
vim.keymap.set("v", "<", "<gv")
vim.keymap.set("v", ">", ">gv")

-- Move text up and down
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")

-- greatest paste remap ever
vim.keymap.set({"v", "x"}, "<leader>p", [["_dP]])
vim.keymap.set({"n", "v"}, "<leader>d", [["_d]])

-- next greatest copy remap ever
vim.keymap.set({"n", "v"}, "<leader>y", [["+y]])
vim.keymap.set("n", "<leader>Y", [["+Y]])

-- Visual Block --
-- Move text up and down
vim.keymap.set("x", "J", ":move '>+1<CR>gv-gv")
vim.keymap.set("x", "K", ":move '<-2<CR>gv-gv")

-- Autopairs
vim.keymap.set('i', '""', '""<left>')
vim.keymap.set('i', "''", "''<left>")
vim.keymap.set('i', '((', '()<left>')
vim.keymap.set('i', '[[', '[]<left>')
vim.keymap.set('i', '{{', '{}<left>')
vim.keymap.set('i', '{<CR>', '{<CR>}<ESC>O')
vim.keymap.set('i', '{;<CR>', '{<CR>};<ESC>O')

-- Terminal --
-- Better terminal navigation
-- vim.keymap.set("t", "<C-h>", "<C-\\><C-N><C-w>h")
-- vim.keymap.set("t", "<C-j>", "<C-\\><C-N><C-w>j")
-- vim.keymap.set("t", "<C-k>", "<C-\\><C-N><C-w>k")
-- vim.keymap.set("t", "<C-l>", "<C-\\><C-N><C-w>l")

-- Navigation in ru/ua language
vim.keymap.set('n', 'ф', 'a')
vim.keymap.set('n', 'Ф', 'A')
vim.keymap.set('n', 'і', 's')
vim.keymap.set('n', 'ы', 's')
vim.keymap.set('n', 'в', 'd')
vim.keymap.set('n', 'а', 'f')
vim.keymap.set('n', 'п', 'g')
vim.keymap.set('n', 'р', 'h')
vim.keymap.set('n', 'о', 'j')
vim.keymap.set('n', 'л', 'k')
vim.keymap.set('n', 'д', 'l')
vim.keymap.set('n', 'ж', ';')
vim.keymap.set('n', 'є', "'")
vim.keymap.set('n', 'э', "'")

vim.keymap.set('n', 'й', 'q')
vim.keymap.set('n', 'ц', 'w')
vim.keymap.set('n', 'у', 'e')
vim.keymap.set('n', 'к', 'r')
vim.keymap.set('n', 'е', 't')
vim.keymap.set('n', 'н', 'y')
vim.keymap.set('n', 'г', 'u')
vim.keymap.set('n', 'ш', 'i')
vim.keymap.set('n', 'Ш', 'I')
vim.keymap.set('n', 'щ', 'o')
vim.keymap.set('n', 'Щ', 'O')
vim.keymap.set('n', 'з', 'p')
vim.keymap.set('n', 'З', 'P')
vim.keymap.set('n', 'х', '[')
vim.keymap.set('n', 'ї', ']')
vim.keymap.set('n', 'ъ', ']')

vim.keymap.set('n', 'я', 'z')
vim.keymap.set('n', 'ч', 'x')
vim.keymap.set('n', 'с', 'c')
vim.keymap.set('n', 'м', 'v')
vim.keymap.set('n', 'М', 'V')
vim.keymap.set('n', 'и', 'b')
vim.keymap.set('n', 'т', 'n')
vim.keymap.set('n', 'ь', 'm')
vim.keymap.set('n', 'б', ',')
vim.keymap.set('n', 'ю', '.')

vim.keymap.set('n', 'нн', 'yy')
vim.keymap.set('n', 'вв', 'dd')
vim.keymap.set('n', 'ЯЯ', 'ZZ')
vim.keymap.set('n', 'ЯЙ', 'ZQ')


